/**
 * pharma-business - 18 mars 2011 guillaume
 */
package org.bspv.pharma.business.rules.order;

import org.bspv.pharma.business.rules.AbstractLeafSpecification;
import org.bspv.pharma.model.OrderDetail;
import org.bspv.pharma.tools.annotations.specification.RG;
import org.bspv.pharma.tools.annotations.specification.UseRG;
import org.bspv.pharma.tools.annotations.specification.UseRGs;

/**
 * Règle de gestion pour l'ajout d'un détail de commande.
 * La règle est composéee des sous règles "quota et validité du type de fourniture"
 * @author guillaume
 * 
 */
@RG(id="RG_ORDER_DETAIL_VALIDITY_001")
public class OrderDetailValidityRule extends AbstractLeafSpecification<OrderDetail> {

    /**
     * Règle sur le quota maximum.
     */
    private OrderDetailRespectQuotaRule orderDetailRespectQuotaRule = new OrderDetailRespectQuotaRule();
    /**
     * Règle sur la validité du type de fourniture.
     */
    private OrderDetailRespectTypeValidityRule orderDetailRespectTypeValidityRule = new OrderDetailRespectTypeValidityRule();
    
    /**
     * {@inheritDoc}
     */
    @UseRGs({
        @UseRG(rg="RG_ORDER_DETAIL_QUOTA_001"),
        @UseRG(rg="RG_ORDER_DETAIL_TYPE_VALIDITY_001")
    })
    @Override
    public boolean isSatisfiedBy(OrderDetail candidate) {
        return orderDetailRespectTypeValidityRule.and(orderDetailRespectQuotaRule).isSatisfiedBy(candidate);
    }

}
